In [1]:
## 사전 실행 코드
import polars as pl
df_boxoffice = pl.read_csv("D:/book/polars/data/movie/KOBIS_기간별박스오피스.csv", skip_rows = 4, try_parse_dates=True)
boxoffice_cols = df_boxoffice.columns
boxoffice_cols[4] = '매출액점유율'
df_boxoffice.columns = [i.replace(' ', '') for i in boxoffice_cols]
df_boxoffice = df_boxoffice.with_columns(
    pl.col('매출액', '누적매출액').str.replace_all(',', '').cast(pl.Int64),
    pl.col('관객수', '누적관객수', '스크린수', '상영횟수').str.replace_all(',', '').cast(pl.Int64)    
)
df_boxoffice = df_boxoffice.with_columns(
    pl.col('장르').str.split(','), 
    pl.col('배우').str.split(','), 
)
df_boxoffice = (df_boxoffice.filter(
    pl.col('순위').is_not_null()).
                filter(~(pl.col('장르').list.contains('성인물(에로)'))).
                filter(pl.col('매출액') != 0).
                filter(~((pl.col('관객수') <= 1) & (pl.col('누적관객수') <= 1) & 
                         (pl.col('스크린수') <= 1) & (pl.col('상영횟수') <= 1)))
                )

8장 폴라스로 영화 데이터 생생하게 그리기¶

8.1 폴라스 시각화의 특징 알아보기¶

8.2 폴라스로 손쉽게 데이터 시각화하기¶

8.3 영화 데이터를 시각적으로 풍부하게 표현하기¶

8.3.1 히스토그램으로 살펴보는 관객 수와 개봉 경향¶

In [2]:
df_boxoffice.filter(pl.col('순위') <= 100).select('스크린수').to_series().plot.hist()
Out[2]:
In [3]:
import altair as alt
(df_boxoffice.filter(pl.col('순위') <= 100).select('관객수')
	.plot.bar(x = alt.X('관객수', title = '관객수').bin(maxbins = 30), y = alt.Y('count()', title='영화편수')))
Out[3]:
In [4]:
import plotly.express as px
In [5]:
fig = px.histogram(  ## plotly.express의 히스토그램 함수
    ## 폴라스 데이터프레임에서 순위 100위 이하 필터링하고, 
    ## X축에 상영횟수 열을 매핑하고 bin의 수를 20개로 설정
	df_boxoffice.filter(pl.col('순위') <= 100), x = '상영횟수', nbins = 20)  
fig.show()
In [6]:
fig = px.histogram(  ## plotly.express의 히스토그램 함수
	(df_boxoffice.filter(pl.col('순위') <= 100).with_columns(pl.col('개봉일').dt.weekday().alias('개봉요일'))		.sort('개봉요일')
	.with_columns(pl.when(pl.col('개봉요일') == 1).then(pl.lit('월'))
		.when(pl.col('개봉요일') == 2).then(pl.lit('화'))
		.when(pl.col('개봉요일') == 3).then(pl.lit('수'))
		.when(pl.col('개봉요일') == 4).then(pl.lit('목'))
		.when(pl.col('개봉요일') == 5).then(pl.lit('금'))
		.when(pl.col('개봉요일') == 6).then(pl.lit('토'))
		.otherwise(pl.lit('일')).alias('개봉요일'))),
	x = "개봉요일", nbins = 7, text_auto = True)
fig.show()
In [7]:
fig = px.histogram(  ## plotly.express의 히스토그램 함수
	(df_boxoffice.filter(pl.col('개봉일').dt.year() == 2024, pl.col('순위') <= 100)
	.with_columns(pl.col('개봉일').dt.month().alias('개봉월'))),  ## 순위 100위 이하 필터링
    ## X축에 상영횟수 열을 매핑하고 bin의 수를 20개로 설정
    x = "개봉월", nbins = 12, color = '대표국적', text_auto = True)
fig.show()